package com.delio.server.pagos.asistencias;

import java.sql.SQLException;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.delio.client.pagos.asistencias.Asistencia;
import com.delio.server.base.Conexion;
import com.delio.server.base.util.GxtGridPaginate;
import com.extjs.gxt.ui.client.data.BasePagingLoadResult;
import com.extjs.gxt.ui.client.data.PagingLoadResult;
import com.ibatis.sqlmap.client.SqlMapClient;

public class Asistencias {
	private static SqlMapClient sqlMap = null;

	@SuppressWarnings("unchecked")
	public static PagingLoadResult<Asistencia> getPaginate( GxtGridPaginate paginate, String filter, Integer turno_id,	Date fecha, Boolean condicion) {

		sqlMap = Conexion.getSqlMap();

		String condicionactual = "";
		String condicionHistorial = "";
		String xml = "";
		Integer cont = 0;
		List<Asistencia> data = null;

		paginate.setLimit();
		
		
		if(contAsistencia(fecha)>0 )
			condicion=false;

				
		if (paginate.order.equals(""))
			paginate.order = " order by a.id desc";

		if (condicion==false) {
			condicionHistorial = " and a.fecha='" + fecha + "'";

			if (turno_id != null) {
				condicionHistorial += " and c.turno_id=" + turno_id;
				if (filter != null)
					condicionHistorial += " and (e.nombres ILIKE '%" + filter
							+ "%' OR e.apellidos ILIKE '%" + filter + "%')";

				paginate.condition = condicionHistorial;

			} else {
				if (filter != null)
					condicionHistorial += "and( e.nombres ILIKE '%" + filter
							+ "%' OR e.apellidos ILIKE '%" + filter + "%')";

			
				paginate.condition = condicionHistorial;
			}

			xml = "paginateAsistencia";
			cont = count(paginate);
		}

		if (condicion) {
		
			   cambioFechacontrol(fecha);
		 
			
			condicionactual = " a.fecha='" + fecha + "' or a.fecha is null";

			if (turno_id != null) {
				condicionactual = " and turno_id=" + turno_id;
				if (filter != null)
					condicionactual += " and a.empleado ILIKE '%" + filter
							+ "%'";

				paginate.condition = condicionactual;
			} else {
				if (filter != null)
					paginate.condition = " and empleado ILIKE '%" + filter
							+ "%'";
			}

			xml = "paginateControlAsistencia";
			cont = count2(paginate);

		}

		try {
			data = sqlMap.queryForList(xml, paginate);

		} catch (SQLException e) {
			e.printStackTrace();

		}
		return new BasePagingLoadResult<Asistencia>(data, paginate.offset, cont);

	}

	private static Integer count(GxtGridPaginate paginate) {
		Integer cont = null;
		try {
			cont = (Integer) sqlMap.queryForObject("countAsistencia");

		} catch (SQLException e) {
			e.printStackTrace();
		}
		return cont;
	}

	private static Integer count2(GxtGridPaginate paginate) {
		Integer cont = null;
		try {
			cont = (Integer) sqlMap.queryForObject("countControlAsistencia");

		} catch (SQLException e) {
			e.printStackTrace();
		}
		return cont;
	}

	@SuppressWarnings({ "unchecked", "rawtypes" })
	public static boolean save(Asistencia as) {
		sqlMap = Conexion.getSqlMap();
		boolean respuesta = true;
		try {

			sqlMap.startTransaction();

			Map m = new HashMap(5);
			m.put("contrato_id", as.getContrato_id());
			m.put("estadoasistencia_id", as.getEstadoasistencia_id());
			m.put("horaentrada", as.getHoraentrada());
			m.put("horasalida", as.getHorasalida());
			m.put("fecha", as.getFecha());
			sqlMap.update("setControlasistencias2", m);
			sqlMap.commitTransaction();
			sqlMap.endTransaction();

		} catch (SQLException e) {
			e.printStackTrace();

			respuesta = false;
		}

		return respuesta;
	}

	public static boolean delete(Integer id) {

		boolean respuesta = true;

		sqlMap = Conexion.getSqlMap();
		try {
			if (id != null)
				sqlMap.delete("deleteAsistencia", id);
			else
				respuesta = false;

		} catch (SQLException e) {
			e.printStackTrace();

			respuesta = false;

		}
		return respuesta;

	}

	public static boolean deleteAll(String ids) {
		boolean respuesta = true;

		sqlMap = Conexion.getSqlMap();
		try {
			if (!ids.equals(""))
				sqlMap.delete("deleteAllAsistencia", ids);
			else
				respuesta = false;

		} catch (SQLException e) {

			e.printStackTrace();

			respuesta = false;

		}
		return respuesta;

	}

	@SuppressWarnings({ "unchecked", "rawtypes" })
	private static void cambioFechacontrol(Date fecha) {
		sqlMap = Conexion.getSqlMap();
		
		try {

			sqlMap.startTransaction();
			Map m = new HashMap(1);
			m.put("fecha", fecha);
			
			sqlMap.update("cambioFecha", m);
			sqlMap.commitTransaction();
			sqlMap.endTransaction();

		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		
	}

	
	@SuppressWarnings({ "unchecked", "rawtypes" })
	private static Integer contAsistencia(Date fecha) {
		
		Integer cont = null;
		sqlMap = Conexion.getSqlMap();
		
		try {

			sqlMap.startTransaction();
			Map m = new HashMap(1);
			m.put("fecha", fecha);
			
			cont=(Integer)sqlMap.queryForObject("consultaAsistencias", m);
			sqlMap.commitTransaction();
			sqlMap.endTransaction();

		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return cont;
	}
	
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public static void setAsistenciaVarios(Date fecha,Boolean valor) {
		
		sqlMap = Conexion.getSqlMap();
		
		try {

			sqlMap.startTransaction();
			Map m = new HashMap(2);
			m.put("fecha", fecha);
			m.put("valor", valor);
			
			sqlMap.update("asistenciaVarios", m);
			sqlMap.commitTransaction();
			sqlMap.endTransaction();

		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	
	}
	
	
}
